package com.xiaojie.learn.spring.readwritesplit.base;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * 读写分离数据源，determineCurrentLookupKey()方法从
 * ThreadLocal中获取当前需要走主库还是从库的标志
 *
 * 来自spring-jdbc的AbstractRoutingDataSource实现了javax.sql.DataSource接口，
 * 这个类可以用来做数据源的路由，可以在其内部配置多个真实的数据源，最终用哪个数据源，
 * 由开发者来决定
 * private Map<Object, DataSource> resolvedDataSources;
 * 这个map用来存储多个目标数据源
 * 例如：
 * resolvedDataSources.put("master",主库数据源);
 * resolvedDataSources.put("salave",从库数据源);
 * 然后使用determineCurrentLookupKey()，将这个方法的返回值作为key，找到map中
 * 的数据源
 */
public class ReadWriteDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DsTypeHolder.getDsType();
    }
}
